題目:
(6 級) Counting Duplicates
寫一個 function,該 function 會計算字串中不區分大小寫的字母以及數字,出現超過一次的有幾個 (假定字串中僅包含大小寫字母和數字)。
範例:
"abcde" -> 0
# 沒有任何字母出現超過 1 次
"aabbcde" -> 2
# 'a' 和 'b'
"aabBcde" -> 2
# 'a' 和 'b' 皆出現 2 次 ('b' 和 'B')
"indivisibility" -> 1
# 'i' 出現 6 次
"Indivisibilities" -> 2
# 'i' 出現 7 次 's' 出現 2 次
"aA11" -> 2
# 'a' 和 '1'
"ABBA" -> 2
# 'A' 和 'B' 皆出現 2 次
Ruby 解法:
def duplicate_count(text)
# 先把計算結果設定為 0
count = 0
# 把 text 轉成小寫並拆開成陣列
arr = text.downcase.split("")
# 移除陣列中重複的字母後一個個拿出來比對
arr.uniq.map { |char|
# 如果單字有一個以上,計算結果就加 1
count += 1 if arr.count(char) > 1
}
# 最後回傳計算結果
count
end
心得:
這題原本想很久,後來發現有 count 方法可以用,瞬間就變得簡單很多。
JavaScript 解法:
function duplicateCount(text){
let count = 0;
let length = 0
let arr = text.toLowerCase().split("");
let unique = [...new Set(arr)];
for (let i = 0; i < unique.length; i++){
length = arr.filter(letter => {
return letter === unique[i];
}).length
if (length > 1) count++;
}
return count;
}
心得:
這題的 JavaScript 本來也挺苦惱的,後來 Google 發現 ES6 有提供 Set 這個可以幫忙挑出 unique 的 object 可以用,題目就變得簡單許多。